Advertisement
Guest User

Untitled

a guest
Dec 27th, 2018
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.68 KB | None | 0 0
  1. <?php
  2.  
  3. function arrayGetSubset($arr, $start, $end, $step = 1, $by_value = false) {
  4.    
  5.     /**
  6.      * @arr - массив
  7.      * @start - начало выборки
  8.      * @end - конец выборки
  9.      * @step - инкремент между элементами последовательности. step должен быть положительным числом
  10.      * @by_value - если этот параметр равен true, то выбор подмножества осуществляется не по ключам, а по значениям
  11.      */
  12.    
  13.     $keys = range($start, $end);
  14.    
  15.     $res = $by_value ? array_intersect($arr, $keys) : array_intersect_key($arr, array_flip($keys));
  16.    
  17.     if ($step > 1) {
  18.        
  19.         $keys_res = $by_value ? $res : array_keys($res);
  20.         $step_keys = range($start, count($keys_res) - 1, $step);
  21.         $steped = array_intersect_key($keys_res, array_flip($step_keys));
  22.        
  23.         $res = $by_value ? array_intersect($res, $steped) : array_intersect_key($res, array_flip($steped));
  24.        
  25.     }
  26.    
  27.     return $res;
  28.    
  29. }
  30.  
  31. // test
  32.  
  33. $arr = [0 => "a", 1 => "b", 4 => "c", 6 => "d", 9 => "e", 13 => "f", 14 => "g", 16 => "h", 17 => "i", 19 => "j", 20 => "k", 21 => "l"];
  34.  
  35. print_r(arrayGetSubset($arr, 0, 20));
  36. print_r(arrayGetSubset($arr, 0, 20, 2));
  37. print_r(arrayGetSubset($arr, 0, 20, 3));
  38.  
  39. //$arr = [0, 1, 3, 5, 7, 9, 10, 11, 12, 14, 15, 18, 20, 21, 22];
  40. $arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22];
  41.  
  42. print_r(arrayGetSubset($arr, 1, 20, 1, true));
  43. print_r(arrayGetSubset($arr, 1, 20, 2, true));
  44. print_r(arrayGetSubset($arr, 1, 20, 3, true));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement